package com.xr.blog.dao;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xr.blog.pojo.BlogArticle;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 文章表
 * 
 * @author XRJ
 * @email 1033835209@qq.com
 * @date 2020-07-07 20:31:38
 */
@Repository
public interface BlogArticleMapper extends BaseMapper<BlogArticle> {

    /**
     * 随机查询文章
     * @param count 需要查询的数量
     * @return
     */
    List<BlogArticle> selectRandomArticles(Integer count);

    /**
     * 获得所有置顶文章
     * @return 文章集合
     */
    List<BlogArticle> findAllTopArticles();

    /**
     * 根据关键字分页查询文章
     * @param page 分页对象
     * @param keyword 关键字
     * @return
     */
    IPage<BlogArticle> findPageByKeyword(Page page,@Param("keyword") String keyword);

    /**
     * 根据链接获取文章
     * @param url 链接
     * @return 文章
     */
    BlogArticle findArticleByUrl(String url);

    /**
     * 根据分类ID分页查询文章
     * @param page 分页对象
     * @param categoryId 分类ID
     * @return 分页对象
     */
    Page<BlogArticle> selectListByCategory(Page page, @Param("categoryId")Long categoryId);

    /**
     * 根据标签ID分页查询文章
     * @param page 分页对象
     * @param tagId 标签ID
     * @return 分页对象
     */
    Page<BlogArticle> selectListByTag(Page page, @Param("tagId")Long tagId);


    /**
     * 查询最新的文章
     * @return
     */
    List<BlogArticle> selectLatestArticle(Integer size);


    /**
     * 条件查询文章：title，category_id，status，type
     * @param page 分页参数
     * @param title
     * @param categoryId
     * @param status
     * @param type
     * @return
     */
    IPage<BlogArticle> findArticleByCondition(Page page,@Param("title")String title,@Param("categoryId")Long categoryId,@Param("status")Integer status,@Param("type")Integer type);

    /**
     * 访问次数+1
     * @param id 文章ID
     * @return
     */
    int updateForVisitsById(Long id);
	
}
